inspector: Pass the drawing context into the recorder
authorBenjamin Otte <otte@redhat.com>
Wed, 30 Nov 2016 17:55:45 +0000 (18:55 +0100)
committerBenjamin Otte <otte@redhat.com>
Mon, 5 Dec 2016 14:02:47 +0000 (15:02 +0100)
That way we can capture both the actual changes (clip region) and the
area that was redrawn (render region), which in OpenGL might not be
identical.

Nothing shows the render region yet though...

gtk/gtkwidget.c
gtk/inspector/recorder.c
gtk/inspector/recorder.h
gtk/inspector/renderrecording.c
gtk/inspector/renderrecording.h
gtk/inspector/window.c
gtk/inspector/window.h

index 3d3ac7b5bbacb33ed3c6a4de1e08d1d903109cef..13045dbfbb432c35ebc98b850aadad0474849c5c 100644 (file)
@@ -15651,7 +15651,12 @@ gtk_widget_render (GtkWidget            *widget,
   root = gtk_snapshot_finish (&snapshot);
   if (root != NULL)
     {
-      gtk_inspector_record_render (widget, renderer, window, region, root);
+      gtk_inspector_record_render (widget,
+                                   renderer,
+                                   window,
+                                   region,
+                                   context,
+                                   root);
 
       gsk_renderer_render (renderer, root, context);
       gsk_render_node_unref (root);
index 07d2fb4e51a44c7b1e65b3c1da787383bae337db..6641fce2cb4dafa557e50de81458145343fd99ff 100644 (file)
@@ -490,6 +490,7 @@ gtk_inspector_recorder_record_render (GtkInspectorRecorder *recorder,
                                       GskRenderer          *renderer,
                                       GdkWindow            *window,
                                       const cairo_region_t *region,
+                                      GdkDrawingContext    *context,
                                       GskRenderNode        *node)
 {
   GtkInspectorRecording *recording;
@@ -506,6 +507,7 @@ gtk_inspector_recorder_record_render (GtkInspectorRecorder *recorder,
                                                     gdk_window_get_width (window),
                                                     gdk_window_get_height (window) },
                                                   region,
+                                                  gdk_drawing_context_get_clip (context),
                                                   node);
   gtk_inspector_recorder_add_recording (recorder, recording);
   g_object_unref (recording);
index 676f3f16606df8f77cf6a00161260ee1f587a330..d15431d30372a414a65ffa29918738db495a29e9 100644 (file)
@@ -53,6 +53,7 @@ void            gtk_inspector_recorder_record_render            (GtkInspectorRec
                                                                  GskRenderer            *renderer,
                                                                  GdkWindow              *window,
                                                                  const cairo_region_t   *region,
+                                                                 GdkDrawingContext      *context,
                                                                  GskRenderNode          *node);
 
 G_END_DECLS
index f3bb0d1599e6f3e3adf2a1c02744c12abd0d891e..48fd34184b4912884afc472fb73b6049255bd4ef 100644 (file)
@@ -27,7 +27,8 @@ gtk_inspector_render_recording_finalize (GObject *object)
 {
   GtkInspectorRenderRecording *recording = GTK_INSPECTOR_RENDER_RECORDING (object);
 
-  g_clear_pointer (&recording->clip, cairo_region_destroy);
+  g_clear_pointer (&recording->clip_region, cairo_region_destroy);
+  g_clear_pointer (&recording->render_region, cairo_region_destroy);
   g_clear_pointer (&recording->node, gsk_render_node_unref);
   g_clear_pointer (&recording->profiler_info, g_free);
 
@@ -63,7 +64,8 @@ GtkInspectorRecording *
 gtk_inspector_render_recording_new (gint64                timestamp,
                                     GskProfiler          *profiler,
                                     const GdkRectangle   *area,
-                                    const cairo_region_t *clip,
+                                    const cairo_region_t *clip_region,
+                                    const cairo_region_t *render_region,
                                     GskRenderNode        *node)
 {
   GtkInspectorRenderRecording *recording;
@@ -74,7 +76,8 @@ gtk_inspector_render_recording_new (gint64                timestamp,
 
   collect_profiler_info (recording, profiler);
   recording->area = *area;
-  recording->clip = cairo_region_copy (clip);
+  recording->clip_region = cairo_region_copy (clip_region);
+  recording->render_region = cairo_region_copy (render_region);
   recording->node = gsk_render_node_ref (node);
 
   return GTK_INSPECTOR_RECORDING (recording);
@@ -89,7 +92,13 @@ gtk_inspector_render_recording_get_node (GtkInspectorRenderRecording *recording)
 const cairo_region_t *
 gtk_inspector_render_recording_get_clip_region (GtkInspectorRenderRecording *recording)
 {
-  return recording->clip;
+  return recording->clip_region;
+}
+
+const cairo_region_t *
+gtk_inspector_render_recording_get_render_region (GtkInspectorRenderRecording *recording)
+{
+  return recording->render_region;
 }
 
 const cairo_rectangle_int_t *
index f84a87e609fe46cfa002dae59ab4245b3fd486b3..e17ae9dea1a2e8febc578aaa06b0e9c80638c4e9 100644 (file)
@@ -41,7 +41,8 @@ typedef struct _GtkInspectorRenderRecording
   GtkInspectorRecording parent;
 
   GdkRectangle area;
-  cairo_region_t *clip;
+  cairo_region_t *clip_region;
+  cairo_region_t *render_region;
   GskRenderNode *node;
   char *profiler_info;
 } GtkInspectorRenderRecording;
@@ -57,12 +58,15 @@ GtkInspectorRecording *
                 gtk_inspector_render_recording_new           (gint64                             timestamp,
                                                               GskProfiler                       *profiler,
                                                               const GdkRectangle                *area,
-                                                              const cairo_region_t              *clip,
+                                                              const cairo_region_t              *clip_region,
+                                                              const cairo_region_t              *render_region,
                                                               GskRenderNode                     *node);
 
 GskRenderNode * gtk_inspector_render_recording_get_node      (GtkInspectorRenderRecording       *recording);
 const cairo_region_t *
                 gtk_inspector_render_recording_get_clip_region (GtkInspectorRenderRecording     *recording);
+const cairo_region_t *
+                gtk_inspector_render_recording_get_render_region (GtkInspectorRenderRecording     *recording);
 const cairo_rectangle_int_t *
                 gtk_inspector_render_recording_get_area      (GtkInspectorRenderRecording       *recording);
 const char *    gtk_inspector_render_recording_get_profiler_info
index b21f5c9842963f2b2525ca75c817b685579d7c8b..fb3231ee5c6c0d9379a6432bf6f3021b0d9ab790 100644 (file)
@@ -346,6 +346,7 @@ gtk_inspector_record_render (GtkWidget            *widget,
                              GskRenderer          *renderer,
                              GdkWindow            *window,
                              const cairo_region_t *region,
+                             GdkDrawingContext    *context,
                              GskRenderNode        *node)
 {
   GtkInspectorWindow *iw;
@@ -363,6 +364,7 @@ gtk_inspector_record_render (GtkWidget            *widget,
                                         renderer,
                                         window,
                                         region,
+                                        context,
                                         node);
 }
 
index 671e759e0eaf8453b8a9eb025f97c6e54a839dc3..3f330d7af5d9d2338bda395c70031d7fe9175400 100644 (file)
@@ -110,6 +110,7 @@ void       gtk_inspector_record_render     (GtkWidget          *widget,
                                             GskRenderer        *renderer,
                                             GdkWindow          *window,
                                             const cairo_region_t *region,
+                                            GdkDrawingContext  *context,
                                             GskRenderNode      *node);
 
 G_END_DECLS